!--------------------------------
! Programa dedicado a calcular
! o volume de um prisma de 6 faces.
! O prisma eh especificado pelo usuario
! atravez dos trez vetores que definem
! os seus lados.
!
! Programa compilado e testado com:
! $ gfortran -o exec03 exec03.f90
! $ ./exec03
! 
! Forma de utilizacao auto-explicativa
! atravez de comentarios.
!
! _o_o_ oOo _o_o_ 25/08/2010

PROGRAM exec02
  IMPLICIT NONE
  REAL(8) :: x1,y1,z1 ! Coordenadas do primeiro vetor
  REAL(8) :: x2,y2,z2 ! Coordenadas do segundo vetor
  REAL(8) :: x3,y3,z3 ! Coordenadas do terceiro vetor
  REAL(8) :: x4,y4,z4 ! Coordenadas do vetor intermediario auxiliar
  REAL(8) :: volume

  write(*,*) "Calcularemos o volume de um prisma"
  write(*,*) "Entre com os tres vetores"
  write(*,*) "dando as tres cordenadas de cada um."
  write(*,*) "Um vetor por linha, com as coordenadas separadas por espaco"
  write(*,*) "Primeira coordenada, por favor."
  read(*,*) x1,y1,z1
  write(*,*) "Segunda coordenada, por favor."
  read(*,*) x2,y2,z2
  write(*,*) "Terceira coordenada, por favor."
  read(*,*) x3,y3,z3

  ! A area de um prisma
  ! pode ser calculado em dois passos::

  ! 1) produto vetorial entre 1 e 2
  x4=y1*z2-z1*y2
  y4=z1*x2-x1*z2
  z4=x1*y2-y1*x2
  IF ((x4.EQ.0) .AND. (y4.EQ.0) .AND. (z4.EQ.0)) THEN
    write(*,*) "vetores 1 e 2 colineares, nao definem lados de um prisma"
  ELSE
    ! 2) Calculando o volume com o 
    ! produto escalar de 3 e 4
    volume = ABS(x3*x4+y3*y4+z3*z4)
    IF (volume.EQ.0) THEN
      write(*,*) "vetores 1, 2 e 3 sao coplanares."
      write(*,*) "nao definem lados de um prisma."
    ELSE
      write(*,*) "O volume do prisma definido pelos"
      write(*,*) "vetores que voce especificou eh", volume
      write(*,*) "Tenha um bom dia!!!"
    END IF
  END IF

end PROGRAM
